<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
	<title>从快照恢复 | Elasticsearch: 权威指南 | Elastic</title>
    <!-- Give IE8 a fighting chance -->
    <!--[if lt IE 9]>
    <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
    <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
    <![endif]-->
	<link rel="stylesheet" type="text/css" href="../static/styles.css" />
</head>
<body>
<div class="main-container">
    <section id="content">
        
        <div class="content-wrapper">
            <section id="guide" lang="zh_cn">
                <div class="container">
                    <div class="row">
                        <div class="col-xs-12 col-sm-8 col-md-8 guide-section">
                            <div style="color:gray; word-break: break-all; font-size:12px;">原文地址: <a href="https://www.elastic.co/guide/cn/elasticsearch/guide/current/_restoring_from_a_snapshot.html" rel="nofollow">https://www.elastic.co/guide/cn/elasticsearch/guide/current/_restoring_from_a_snapshot.html</a>, 版权归 www.elastic.co 所有<br/>
                            英文版地址: <a href="https://www.elastic.co/guide/en/elasticsearch/guide/current/_restoring_from_a_snapshot.html" rel="nofollow">https://www.elastic.co/guide/en/elasticsearch/guide/current/_restoring_from_a_snapshot.html</a>
                            </div>
                        <!-- start body -->
                  <div class="page_header">
<b>请注意:</b><br>本书基于 Elasticsearch 2.x 版本，有些内容可能已经过时。
</div>
<div id="content">
<div class="breadcrumbs">
<span class="breadcrumb-link"><a href="index.html">Elasticsearch: 权威指南</a></span>
»
<span class="breadcrumb-link"><a href="administration.html">管理、监控和部署</a></span>
»
<span class="breadcrumb-link"><a href="post_deploy.html">部署后</a></span>
»
<span class="breadcrumb-node">从快照恢复</span>
</div>
<div class="navheader">
<span class="prev">
<a href="backing-up-your-cluster.html">« 备份你的集群</a>
</span>
<span class="next">
<a href="_clusters_are_living_breathing_creatures.html">集群是活着的、呼吸着的生命 »</a>
</span>
</div>
<div class="section">
<div class="titlepage"><div><div>
<h2 class="title">
<a id="_restoring_from_a_snapshot"></a>从快照恢复<a class="edit_me edit_me_private" rel="nofollow" title="Editing on GitHub is available to Elastic" href="https://github.com/elasticsearch-cn/elasticsearch-definitive-guide/edit/cn/520_Post_Deployment/60_restore.asciidoc">edit</a>
</h2>
</div></div></div>
<p>一旦备份了一些数据，恢复它就简单了：只要在你希望恢复到集群的快照 ID后面加上 <code class="literal">_restore</code> 即可：</p>
<div class="pre_wrapper lang-js">
<pre class="programlisting prettyprint lang-js">POST _snapshot/my_backup/snapshot_1/_restore</pre>
</div>
<p>默认行为是恢复这个快照中存在的所有索引。

如果 <code class="word">snapshot_1</code> 包括五个索引，这五个都会被恢复到集群里。

和 <code class="literal">snapshot</code> API 一样，可以选择要恢复的索引。</p>

<p>还有另外一些重命名索引的选项。

这个选项允许你通过模式(pattern)匹配索引名称，然后在恢复过程中提供一个新名称。

如果你想在不替换现有数据的前提下，恢复老数据来验证内容，或者做其他处理，这个选项很有用。让我们从快照里恢复单个索引并提供一个替换的名称：</p>

<div class="pre_wrapper lang-js">
<pre class="programlisting prettyprint lang-js">POST /_snapshot/my_backup/snapshot_1/_restore
{
    "indices": "index_1", <a id="CO312-1"></a><i class="conum" data-value="1"></i>
    "rename_pattern": "index_(.+)", <a id="CO312-2"></a><i class="conum" data-value="2"></i>
    "rename_replacement": "restored_index_$1" <a id="CO312-3"></a><i class="conum" data-value="3"></i>
}</pre>
</div>
<div class="calloutlist">
<table border="0" summary="Callout list">
<tr>
<td align="left" valign="top" width="5%">
<p><a href="#CO312-1"><i class="conum" data-value="1"></i></a></p>
</td>
<td align="left" valign="top">
<p>只恢复索引<code class="word">index_1</code>，忽略快照中存在的其它索引。</p>
</td>
</tr>
<tr>
<td align="left" valign="top" width="5%">
<p><a href="#CO312-2"><i class="conum" data-value="2"></i></a></p>
</td>
<td align="left" valign="top">
<p>查找所提供的模式能匹配上的正在恢复的索引。</p>
</td>
</tr>
<tr>
<td align="left" valign="top" width="5%">
<p><a href="#CO312-3"><i class="conum" data-value="3"></i></a></p>
</td>
<td align="left" valign="top">
<p>然后用替代的模式重命名它们。</p>
</td>
</tr>
</table>
</div>
<p>这将恢复 <code class="word">index_1</code> 到你的集群里，但是重命名成了 <code class="word">restored_index_1</code> 。</p>
<div class="tip admon">
<div class="icon"></div>
<div class="admon_content">
<p>和快照(snapshot)类似， <code class="literal">restore</code> 命令也会立刻返回，恢复进程会在后台运行。如果你希望 HTTP 调用阻塞直到恢复完成，只需添加 <code class="literal">wait_for_completion</code> 标记：</p>
<div class="pre_wrapper lang-js">
<pre class="programlisting prettyprint lang-js">POST _snapshot/my_backup/snapshot_1/_restore?wait_for_completion=true</pre>
</div>
</div>
</div>
<div class="section">
<div class="titlepage"><div><div>
<h3 class="title">
<a id="_监控恢复操作"></a>监控恢复操作<a class="edit_me edit_me_private" rel="nofollow" title="Editing on GitHub is available to Elastic" href="https://github.com/elasticsearch-cn/elasticsearch-definitive-guide/edit/cn/520_Post_Deployment/60_restore.asciidoc">edit</a>
</h3>
</div></div></div>
<p>从仓库恢复数据依托于 Elasticsearch 里存在的的已经内置的恢复机制。

在内部实现上，从仓库恢复分片和从另一个节点恢复是等价的。</p>

<p>如果你想监控恢复的进度，可以使用 <code class="literal">recovery</code> API。

这是一个通用的 API，它显示了分片在集群中移动的状态。</p>

<p>可以为正在恢复的某一个索引调用这个API：</p>
<div class="pre_wrapper lang-js">
<pre class="programlisting prettyprint lang-js">GET restored_index_3/_recovery</pre>
</div>
<p>或者查看集群里的所有索引，可能包括跟你的恢复进程无关的其他移动的分片：</p>
<div class="pre_wrapper lang-js">
<pre class="programlisting prettyprint lang-js">GET /_recovery/</pre>
</div>
<p>输出会跟这个类似（注意，根据集群的活跃度，输出可能会变得非常冗长！）：</p>
<div class="pre_wrapper lang-js">
<pre class="programlisting prettyprint lang-js">{
  "restored_index_3" : {
    "shards" : [ {
      "id" : 0,
      "type" : "snapshot", <a id="CO313-1"></a><i class="conum" data-value="1"></i>
      "stage" : "index",
      "primary" : true,
      "start_time" : "2014-02-24T12:15:59.716",
      "stop_time" : 0,
      "total_time_in_millis" : 175576,
      "source" : { <a id="CO313-2"></a><i class="conum" data-value="2"></i>
        "repository" : "my_backup",
        "snapshot" : "snapshot_3",
        "index" : "restored_index_3"
      },
      "target" : {
        "id" : "ryqJ5lO5S4-lSFbGntkEkg",
        "hostname" : "my.fqdn",
        "ip" : "10.0.1.7",
        "name" : "my_es_node"
      },
      "index" : {
        "files" : {
          "total" : 73,
          "reused" : 0,
          "recovered" : 69,
          "percent" : "94.5%" <a id="CO313-3"></a><i class="conum" data-value="3"></i>
        },
        "bytes" : {
          "total" : 79063092,
          "reused" : 0,
          "recovered" : 68891939,
          "percent" : "87.1%"
        },
        "total_time_in_millis" : 0
      },
      "translog" : {
        "recovered" : 0,
        "total_time_in_millis" : 0
      },
      "start" : {
        "check_index_time" : 0,
        "total_time_in_millis" : 0
      }
    } ]
  }
}</pre>
</div>
<div class="calloutlist">
<table border="0" summary="Callout list">
<tr>
<td align="left" valign="top" width="5%">
<p><a href="#CO313-1"><i class="conum" data-value="1"></i></a></p>
</td>
<td align="left" valign="top">
<p><code class="literal">type</code> 字段告诉你恢复的本质；此分片正在从一个快照中恢复。</p>
</td>
</tr>
<tr>
<td align="left" valign="top" width="5%">
<p><a href="#CO313-2"><i class="conum" data-value="2"></i></a></p>
</td>
<td align="left" valign="top">
<p><code class="literal">source</code> 哈希描述了作为恢复来源的特定快照和仓库。</p>
</td>
</tr>
<tr>
<td align="left" valign="top" width="5%">
<p><a href="#CO313-3"><i class="conum" data-value="3"></i></a></p>
</td>
<td align="left" valign="top">
<p><code class="literal">percent</code> 字段告诉你恢复的状态。这个特定分片的文件目前已经恢复了 94%；它几乎的完整的了。</p>
</td>
</tr>
</table>
</div>
<p>输出会列出所有当前正在恢复中的索引，然后列出这些索引里的所有分片。每个分片都会有启动/停止时间、持续时间、恢复百分比、传输字节数等统计信息。</p>
</div>

<div class="section">
<div class="titlepage"><div><div>
<h3 class="title">
<a id="_取消一个恢复"></a>取消一个恢复<a class="edit_me edit_me_private" rel="nofollow" title="Editing on GitHub is available to Elastic" href="https://github.com/elasticsearch-cn/elasticsearch-definitive-guide/edit/cn/520_Post_Deployment/60_restore.asciidoc">edit</a>
</h3>
</div></div></div>
<p>要取消一个恢复，你需要删除正在恢复的索引。

因为恢复过程其实就是分片的恢复，发送一个 <code class="literal">delete-index</code> API 修改集群状态，就会反过来停止恢复。比如：</p>

<div class="pre_wrapper lang-js">
<pre class="programlisting prettyprint lang-js">DELETE /restored_index_3</pre>
</div>
<p>如果 <code class="word">restored_index_3</code> 正在恢复中，这个删除命令会停止恢复，同时删除任何已经恢复到集群里的数据。</p>
</div>

</div>
<div class="navfooter">
<span class="prev">
<a href="backing-up-your-cluster.html">« 备份你的集群</a>
</span>
<span class="next">
<a href="_clusters_are_living_breathing_creatures.html">集群是活着的、呼吸着的生命 »</a>
</span>
</div>
</div>

                  <!-- end body -->
                        </div>
                        <div class="col-xs-12 col-sm-4 col-md-4" id="right_col">
                        
                        </div>
                    </div>
                </div>
            </section>
        </div>
    </section>
</div>
<script src="../static/cn.js"></script>
</body>
</html>